package main

/*
业务逻辑复杂
*/

import (
	"fmt"

	"time"
)

func WriteIn(ch chan int) {

	for i := 0; i < 10; i++ {

		ch <- i

	}

}

func ReadOut(ch chan int) {

	for i := 0; i < 10; i++ {

		value := <-ch

		fmt.Println(value)

	}

}

func main() {

	ch := make(chan int)

	go WriteIn(ch)

	go ReadOut(ch)

	time.Sleep(time.Second * 5)

}

/*
2）消息机制实现多线程通信
go语言使用channel在两个或多个线程之间传递消息。channel翻译成中文就算通道的意思，我们直接看代码：
输出：1 2 3 4 5 6 7 8 9，通过chanel在不需要锁的情况下实现了数据的共享，chanel的用法中，常见的操作包括写入和读出，写入和读出都会导致线程的阻塞，也就是说数据写入后线程会等待另一个线程的读取，而读取之前如果没有数据写入也会进入阻塞状态等待数据写入。
*/
